import re, string


# 主模块
def main():
    s = input("请输入需要加密的字符串：")
    letter1 = letter(s)
    print("过滤后字符串：", letter1)
    reverse(letter1)


# 过滤字符串
def letter(str):
    # 过滤中文字符
    filter = re.compile(r'[^\x00-\x7f]')
    return filter.sub('', str)


# 反转
def reverse(letter):
    letter_ = letter[::-1]
    print("反转后字符串：", letter_)
    code = enCode(letter_, 4)
    print("加密后字符串：", code)


# 加密输出
# 加密公式： f(s)=(s+k) mod 26
# 解密公式： f(s)=(s+26-k) mod 26
# k：偏移量
def enCode(s, k):
    # 小写字母
    lower = string.ascii_lowercase
    # 大写字母
    upper = string.ascii_uppercase
    # 偏移前的字母顺序 小写+大写
    before = string.ascii_letters

    # 偏移后的字母顺序 小写+大写  偏移后叠加
    after = lower[k:] + lower[:k] + upper[k:] + upper[:k]

    # 创建映射表
    table = ''.maketrans(before, after)

    # 开始转译
    return s.translate(table)


main()
